package com.jvm.socket.demo2;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;

/**
 * demo1中可以实现的是单个聊天模式  发送单挑信息 ---- 示例展示了 NIO 的原理
 * ??? 怎么实现可以发送多天信息呢 ???
 * 解决方式: 设置非阻塞 ---- 这里重要步骤就是设置成非阻塞的
 */
public class QQServer {

    static byte[] bytes = new byte[1024];

    public static void main(String[] args) {

        List<Socket> socketList = null;

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket();
            serverSocket.bind(new InetSocketAddress(8080));
            // 这里设置获取链接为非阻塞
            // serverSocket.setConfig(false);   // 这里报错 只是展示伪代码
            while(true){
                //
                Socket socket = serverSocket.accept();
                if(socket == null) {
                    System.out.println("无人链接");
                } else {
                    // 这里设置获取客户端发送的消息为非阻塞
                    // socket.setConfg(false);  // 这里报错 只是展示伪代码

                    // 此处将客户端发送过来的链接socket保存到list中
                    socketList.add(socket);
                    // 有人链接时  循环socketList 读取每一个socket发送过来的消息
                    for(Socket socketTemp : socketList){
                        int read = socket.getInputStream().read(bytes);
                        // read不等于0表示读取到数据 做出相应的处理即可
                        if(read != 0){
                            // do something
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}